
"""
一、定义一个学生Student类。有下面的类属性：
1 姓名 name
2 年龄 age
3 成绩 score（语文，数学，英语) [每课成绩的类型为整数]
类方法：
 1 获取学生的姓名：get_name() 返回类型:str
2 获取学生的年龄：get_age() 返回类型:int
3 返回3门科目中最高的分数。get_course() 返回类型:int
4 将每个实例学生对象写进txt文件里，要持久保存
举例：{"姓名":"a","年龄":29,"成绩":{"语文":99,"数学":100,"英语":85}
5 获取所有学生的信息
写好类以后，可以定义2个同学测试下:
zm = Student('zhangming',20,[69,88,100])
"""
# class Student:
#     def __init__(self,name,age,score):
#         self.name=name
#         self.age=age
#         self.score=score
#         def get_name(self)->str:
#             return self.name
#         def get_age(self)->int:
#             return self.age
#         def get_course(self)->int:
#             return max(self.score)
# if __name__ == '__main__':
#     p1=Student("a",29,{"语文":99,"数学":100,"英语":85})
#     print(p1.__dict__)

class Student:
    def __init__(self,name,age,score:list):  #score:list 中的 list 是一个类型提示，它表示期望传给 score 参数的值应该是一个列表
        self.name = name
        self.age = age
        self.score = score
        str1 = "{'姓名':%s,'年龄':%s,'成绩':{'语文':%s,'数学':%s,'英语':%s}}\n" % (
            self.name, self.age, self.score[0], self.score[1], self.score[2])
# %s 是一种占位符，用于将后面的变量以字符串的形式插入到该位置。
# \n 在字符串末尾添加了一个换行符。
        with open('student.txt', 'r', encoding='utf-8') as f:
#         with: 这是 Python 中用于管理资源的一个关键字。'r': 表示以只读模式打开文件。这意味着你只能读取文件内容而不能修改它。
# encoding='utf-8': 指定文件的编码格式为 UTF-8 as f: 将打开的文件对象赋值给变量 f，这样就可以通过这个变量对文件进行操作
            all = f.readlines() #f.readlines(): 这是一个方法调用，用于从文件对象 f 中读取所有行，并返回一个列表，其中每个元素是一行文本
        if str1 not in all: #判断是否已存在该学生记录
            with open('student.txt','a',encoding='utf-8') as f:
                f.write(str1)
    def get_name(self):
        return self.name
    def get_age(self):
        return self.age
    def get_course(self):
        max_score = self.score[0]
        for i in self.score:
            if i>max_score:
                max_score=i
        return f'返回3门科目中最高的分数是:{max_score}'

    def get_course(self):
        max_score = max(self.score)
        return f'{self.name} 的最高分是：{max_score}'
    def get_all_studentInfo(self):  #定义了一个类方法 get_all_studentInfo
        with open('student.txt','r',encoding='utf-8')as f:
            all_data=f.readlines()
        for i,k in enumerate(all_data):
            print(f'第{i+1}个学生姓名为：{k}') #索引值 (i + 1): 使用 i + 1 来使索引从 1 开始，这样更符合人类习惯（通常我们从1开始计数）
if __name__ == '__main__':
    s1=Student('小白',25,[89,99,67])
    s2=Student('王二麻子',18,[56,77,69])
    print(s1.get_name())  #调用get_name方法
    print(s1.get_age())  #调用get_age方法
    print(s1.get_course()) #调用get_course方法
    print(s2.get_course())
    print(s1.get_all_studentInfo()) #调用get_all_studentInfo方法


"""
定义一个字典类：dictclass。完成下面的功能：
# 1 删除某个key
# 2 判断某个键是否在字典里，如果在返回键对应的值，不存在则返回'not found'
# 3 返回键组成的列表：返回类型;(list)
# 4 合并字典，并且返回合并后字典的values组成的列表。返回类型:(list)
"""
class dictclass:
    def __init__(self,mydict:dict):
        self.mydict=mydict
    def del_key(self,key):
        if key in self.mydict:
            del self.mydict[key] #使用 del 关键字从字典中删除指定的键值对
            return f"删除:{key}成功！"
        else:
            return f"not found"
        def key_list(self):
            return list(self.mydict.keys())
        def update_dict(self,dict1):
            self.mydict.update(dict1)
            return list(self.mydict.values())
if __name__ == '__main__':
    d1=dictclass({"姓名":"小白","年龄":18})  #实例化一个对象
    print(d1.del_key("姓名"))  #删除key：姓名
    print(d1.key_list) #调用key_list 查看所有key
    d1.update_dict({"地址":"沈阳"})

